# 多线程 (Threading) 知识点
# Python中的多线程允许程序同时执行多个任务，提高程序效率

# 1. threading模块基础
# threading是Python标准库中的多线程模块
# 通过Thread类创建和管理线程

# 2. 创建线程的方式
# 方式一：直接创建Thread对象
# threading.Thread(target=function, args=(arg1, arg2))
# target参数：指定线程要执行的函数
# args参数：以元组形式传递给函数的参数
# kwargs参数：以字典形式传递给函数的参数
# 示例：
# def my_function(name, count):
#     for i in range(count):
#         print(f"{name}: {i}")
# thread = threading.Thread(target=my_function, args=("线程1", 5))

# 方式二：继承Thread类
# 1. 创建一个继承自threading.Thread的子类
# 2. 重写run()方法，run()方法中的代码就是线程要执行的任务
# 3. 创建子类实例并调用start()方法启动线程
# 示例：
# class MyThread(threading.Thread):
#     def __init__(self, name, count):
#         super().__init__()  # 调用父类初始化方法
#         self.name = name
#         self.count = count
#     
#     def run(self):  # 重写run方法
#         for i in range(self.count):
#             print(f"{self.name}: {i}")
# 
# thread = MyThread("线程1", 5)  # 创建线程对象
# thread.start()  # 启动线程

# 3. 线程控制方法
# start() - 启动线程
# join() - 等待线程执行完毕
# is_alive() - 检查线程是否还在运行

# 4. 多线程的应用场景
# 1. I/O密集型任务（文件读写、网络请求）
# 2. 后台任务处理
# 3. 用户界面响应保持
# 4. 并行数据处理
# 5. 定时任务执行

# 4. 多线程的优缺点
# 优点:
# 1. 提高程序响应性
# 2. 提高资源利用率
# 3. 简化程序结构

# 缺点:
# 1. 线程安全问题
# 2. 调试困难
# 3. 增加系统开销
# 4. 可能出现死锁

import threading
import time

# 简单示例代码
def simple_task(name):
    """简单的线程任务函数"""
    for i in range(3):
        print(f"线程 {name}: {i}")
        time.sleep(1)
    print(f"线程 {name} 执行完毕")

# 创建并启动线程
thread1 = threading.Thread(target=simple_task, args=("Thread-1",))
thread2 = threading.Thread(target=simple_task, args=("Thread-2",))

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("所有线程执行完毕")